在現代Web開發中,構建動態Web應用已經成為常態。這些應用能夠根據使用者的請求生成動態內容,從而提供更豐富的使用者體驗。本文將向您介紹如何使用Spring Boot和Thymeleaf這一強大的組合來構建動態Web應用。
Thymeleaf是一款流行的模板引擎,專為Web開發而設計。它與Spring Boot完美集成,提供了強大的模板功能,允許您在HTML中嵌入動態內容。Thymeleaf還支持國際化和本地化,使多語言支持變得容易。
在本文中,我們將深入探討如何使用Spring Boot和Thymeleaf來構建動態Web應用。以下是我們將要涵蓋的主要內容:
Thymeleaf是一個強大而靈活的模板引擎,專為Web和獨立環境開發。它的語法清晰且易於學習,使您能夠在HTML頁面中嵌入動態內容,同時保持良好的可讀性。
首先,讓我們簡要介紹Thymeleaf的基本概念:
${}
包圍,例如${user.name}
表示訪問模型中user
物件的name
屬性。首先,讓我們創建一個簡單的Thymeleaf模板,
讓我們通過一個簡單的示例來創建一個Thymeleaf模板。首先,創建一個名為welcome.html
的HTML文件,然後將其保存在src/main/resources/templates
目錄下(Spring Boot默認的Thymeleaf模板目錄)。
創建一個HTML文件welcome.html
:
<!DOCTYPE html>
<html lang="zh-Hant-TW" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Welcome Page</title>
</head>
<body>
<h1>Welcome, <span th:text="${user.name}">User</span>!</h1>
<p th:if="${user.isAdmin}">You are an admin.</p>
</body>
</html>
我們定義了一個簡單的HTML頁面,其中包含一個標題和一個段落。我們使用Thymeleaf表達式${user.name}
將使用者的姓名動態插入到頁面中,如果user.isAdmin
為真,我們還會顯示一條消息。
在Spring Boot應用中,創建一個控制器方法,用於處理HTTP請求並渲染welcome.html
模板。在控制器中,您可以設置username
變量的值,以便在模板中渲染。
@Controller
public class WelcomeController {
@GetMapping("/welcome")
public String welcome(Model model) {
// 創建一個名為"user"的模型屬性,並設置其值
model.addAttribute("user", new User("Ian Liu", true));
return "welcome"; // 回傳Thymeleaf模板的名稱
}
}
在上面的程式碼中,我們創建了一個名為WelcomeController
的控制器類,並使用@Controller
註解標記它。然後,我們定義了一個welcome
方法,它處理/welcome
路徑的GET請求。
在welcome
方法中,我們創建了一個Model
物件,並通過model.addAttribute
方法將名為user
的模型屬性添加到模型中。這個user
屬性將在Thymeleaf模板中使用。
最後,我們返回了字符串 "welcome",這是Thymeleaf模板的名稱。Spring Boot將自動查找名為welcome.html
的模板文件,並將模型中的數據渲染到模板中。
當使用者訪問/welcome
路徑時,控制器將處理請求並渲染welcome.html
模板。
Thymeleaf使用表達式來在模板中嵌入動態內容。表達式用於在HTML標籤中引用變數、屬性和方法。以下是一些常見的Thymeleaf表達式示例:
${variable}
。這允許您在模板中引用變數的值,例如${user.name}
會顯示使用者的名字。*{property}
。這用於引用物件的屬性,例如*{book.title}
將顯示書的標題。#{key}
。這用於國際化,根據不同的語言和地區顯示不同的訊息。例如#{welcome.message}
。Thymeleaf使用表達式來訪問和操作模型中的數據。表達式由${}
包圍,用於輸出變數的值或執行一些操作。以下是一些常見的Thymeleaf表達式示例:
<p>${user.name}</p>
<p>今天是:${#dates.format(date, 'dd-MM-yyyy')}</p>
Thymeleaf還允許您在HTML標籤屬性中使用表達式來綁定動態數據。這使得在生成HTML時可以根據模型中的數據來動態設置屬性。例如:
<a th:href="@{/profile/${user.id}}">查看個人資料</a>
上述程式碼中,th:href
屬性使用Thymeleaf表達式來動態設置鏈接的URL,其中${user.id}
表示模型中的使用者ID。
Thymeleaf還支持條件語句和迴圈,這些功能使得根據條件顯示或隱藏內容,或者多次重複渲染某個元素成為可能。以下是一些示例:
<div th:if="${user.isAdmin}">
<p>歡迎,管理員!</p>
</div>
上述程式碼中,th:if
條件語句根據user.isAdmin
的值來決定是否渲染<div>
元素。<ul>
<li th:each="item : ${items}">
<span th:text="${item.name}"></span>
</li>
</ul>
在上述示例中,th:each
迴圈遍歷items
列表,為每個項目創建一個<li>
元素。